/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dib;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 *
 * @author alex
 */
public class Nodo extends  JPanel  {

    Integer valorHeuristico;

    public Integer getValorHeuristico() {
        return valorHeuristico;
    }

    public void setValorHeuristico(Integer valorHeuristico) {
        this.valorHeuristico = valorHeuristico;
    }
    int posx,posy;
    String nombre="";
    Arista aIzquierda, aDerecha;
    Boolean seleccionado=false;
    boolean primeroelmejor=false;
    boolean inicio=false;
    boolean fin=false;

    public boolean isFin() {
        return fin;
    }

    public void setFin(boolean fin) {
        this.fin = fin;
        if(this.fin)
            this.setToolTipText("Nodo Final");
        else
            this.setToolTipText("");
    }

    public boolean isInicio() {
        return inicio;
    }

    public void setInicio(boolean inicio) {
        this.inicio = inicio;
        if(this.inicio)
            this.setToolTipText("Nodo Inicial");
        else
          this.setToolTipText("");  
    }
    
    
    public int getPosx() {
        return posx;
    }

    public void setPosx(int posx) {
        this.posx = posx;
    }

    public int getPosy() {
        return posy;
    }

    public void setPosy(int posy) {
        this.posy = posy;
    }

    public Boolean getSeleccionado() {
        return seleccionado;
    }

    public void setSeleccionado(Boolean seleccionado) {
        this.seleccionado = seleccionado;
    }

    public Arista getaDerecha() {
        return aDerecha;
    }

    public void setaDerecha(Arista aDerecha) {
        this.aDerecha = aDerecha;
    }

    public Arista getaIzquierda() {
        return aIzquierda;
    }

    public void setaIzquierda(Arista aIzquierda) {
        this.aIzquierda = aIzquierda;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    
    
    public Nodo() {
    }

    public Nodo(int posx, int posy, boolean primeroelmejor) throws Throwable {
        this.setBounds(posx, posy, 260, 260);
        this.setSize(60, 60);
        this.posx = posx;
        this.posy = posy;
        this.valorHeuristico=0;
        this.nombre= JOptionPane.showInputDialog(null, "Ingrese el nombre del nodo");
        if(this.nombre==null)
           {
                    this.finalize();
                    return;
                }
        this.primeroelmejor= primeroelmejor;
        if(this.primeroelmejor)
        {
            boolean t;
            do{
                t=false;
                String valor= JOptionPane.showInputDialog(null,"Ingrese el valor heuristico del nodo");
                if(valor==null)
                 {
                    this.finalize();
                    t=false;
                    return;
                }
                else{
                    t=valor.equals("");
                    if(!t)
                    {
                        try {
                            this.valorHeuristico= Integer.parseInt(valor);
                        } catch (Exception e) {
                            t=true;
                            JOptionPane.showMessageDialog(null, "El valor heuristico debe ser un numero entero");
                        }
                    }
                }
                
            }while(t);
        }
        
    }

    public Nodo(int posx, int posy) throws Throwable {
        this.setBounds(posx, posy, 260, 260);
        this.setSize(60, 60);
       // this.setBackground(Color.black);
        this.posx = posx;
        this.posy = posy;
        this.valorHeuristico=0;
        this.nombre= JOptionPane.showInputDialog(null, "Ingrese el nombre del nodo");
       if(this.nombre==null)
           {
                    this.finalize();
                    return;
                }
    //     this.addMouseListener(this);
    }
    
    public void AgregarArista(Nodo siguiente)
    {
        if(this.aDerecha==null)
            this.aDerecha= new Arista(this.posx+50, this.posy,0,0);
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2=(Graphics2D)g;
        g2.setColor(Color.yellow);
        g2.fillOval(this.posx, this.posy, 50, 50);
        if(this.seleccionado)
            g2.setColor(Color.blue);
        else
            g2.setColor(Color.BLACK);
        
         if(this.inicio)
        {
            g2.setColor(Color.blue);
            g2.fillOval(this.posx+12, this.posy+12, 25, 25);
           
        }
        if(this.fin)
        {
            g2.setColor(Color.RED);
            g2.fillOval(this.posx+12, this.posy+12, 25, 25);
           
        }
        g2.setColor(Color.BLACK);
        if(this.primeroelmejor)
            g2.drawString(this.valorHeuristico.toString(), this.posx+20, this.posy+25);
        g2.setColor(Color.BLACK);
        
        g2.drawString(nombre, posx, posy);
        if(this.aDerecha!=null)
            this.aDerecha.paint(g2);
        if(this.aIzquierda!=null)
            this.aIzquierda.paint(g2);
    }
    
}
